﻿using System.Collections.Generic;
using MaxStoreErp.Core.Exceptions;
using MaxStoreShop.Domain.Directories;
using MaxStoreShop.Domain.Shop;
using MaxStoreShop.Logic.RepositoriesContracts.Shop;
using MaxStoreShop.Logic.ServicesContracts.Shop;

namespace MaxStoreShop.Logic.Services.Shop
{
    public class DebtorRuleService : IDebtorRuleService
    {
        readonly IDebtorRuleRepository _repository;

        public DebtorRuleService(IDebtorRuleRepository repository)
        {
            _repository = repository;
        }

        public IEnumerable<DebtorRule> GetAllRules()
        {
            return _repository.GetAllRules();
        }

        public void DeleteRule(DebtorRule debtorRule)
        {
            if (debtorRule == null)
                throw new ErpRuntimeException("Не указано правило должника для удаления!");

            _repository.DeleteRule(debtorRule.Id);
        }

        public void SaveRule(DebtorRule debtorRule)
        {
            if (debtorRule == null)
                throw new ErpRuntimeException("Не указано правило для сохранения!");

            if (debtorRule.Character == null)
                throw new ErpRuntimeException("Не указан человек, для которого предназначено правило должника!");

            if (debtorRule.MaxDebtSize < 0)
                throw new ErpRuntimeException(
                    "Указано отрицательное число в качестве максимально допустимой задолженности должника!");

            _repository.SaveRule(debtorRule);
        }

        public DebtorRule GetCharacterDebtRule(Character character)
        {
            if (character == null)
                throw new ErpRuntimeException("Не указан человек для получения правила должника!");

            return _repository.GetCharacterDebtRule(character.Id);
        }
    }
}
